package com.fdb.efp.nls.common.util;

import com.fdb.basic.framework.core.util.Base64;
import com.fdb.basic.framework.core.util.FileUtil;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class PspCheckRptPdfTemplete {

	private static Logger logger = LoggerFactory.getLogger(PspCheckRptPdfTemplete.class);

	private static String CTRL_SUFFIX = ".pdf";// 文件后缀

	/**
	 *
	 * 生成PDF文件 <br>
	 * 0.1:ludayong:2019年9月21日 下午1:45:12:新增 <br>
	 *
	 * @author ludayong
	 * @since 2019年9月21日 下午1:45:12
	 * @date 2019年9月21日 下午1:45:12
	 * @version 0.1
	 */
	public static String createPdf(String locaFilePath, String bizSerno, String basicCont[], String regCont[], String pbocOldCont[],
			String pbocNewCont[], String pbocCellTitile[]) {
		File file = new File(locaFilePath);
		if (!file.exists()) {
			logger.info("本地文件夹不存在，开始创建文件夹......");
			file.mkdir();
		}
		// 把文件转为二进制字符串
		String fileStrByte = null;
		// 文件名称
		String fileName = bizSerno + CTRL_SUFFIX;
		// PDF文件对象
		File pdfFile = null;
		// 文件绝对路径
		String filePath = locaFilePath + fileName;
		// 文档对象
		Document document = null;
		String title = "检查报告";
		try {
			// 第一步，创建一个 iTextSharp.text.Document对象的实例：
			// 创建文档,设置页面大小，左、右、上和下页边距。
			document = new Document(PageSize.A4, 30, 30, 40, 20);
			pdfFile = new File(filePath);
			if (pdfFile != null && pdfFile.exists() && pdfFile.isFile()) {
				// 如果存在，先删除文件
				pdfFile.delete();
			}
			// 第二步，为该Document创建一个Writer实例：
			PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(filePath));
			// 第三步，打开当前Document
			document.open();
			// 第四步，为当前Document添加内容
			// 标题文字设置
			Font titleFont = ItextPdfUtil.setFont(32, Font.BOLD);
			// 小标题文字设置
			Font mintTitleFont = ItextPdfUtil.setFont(18, Font.NORMAL);
			// 表格字体设置
			Font cellFont = ItextPdfUtil.setFont(16, Font.NORMAL);
			// 表格字体设置
			Font tabFont = ItextPdfUtil.setFont(12, Font.NORMAL);

			// 02.插入表格
			// 检查报告基本信息
			int basicCellNum = 4;
			PdfPTable basicTable = ItextPdfUtil.setPdfPTable(basicCellNum, 40f, 0f, 500f, 30f);
			// 检查报告登记信息
			int regCellNum = 4;
			PdfPTable regTable = ItextPdfUtil.setPdfPTable(regCellNum, 40f, 0f, 500f, 30f);
			// 检查报告人行征信信息
			int pbocCellNum = 6;
			PdfPTable pbocTable = ItextPdfUtil.setPdfPTable(pbocCellNum, 40f, 0f, 500f, 30f);
			// 设置单元格
			PdfPCell cell = null;
			document.newPage();

			// 检查报告基本信息
			cell = new PdfPCell(new Phrase("1.基本信息", mintTitleFont));
			cell.setColspan(basicCellNum);
			basicTable.addCell(cell);
			cell = new PdfPCell(new Phrase(" ", mintTitleFont));
			cell.setColspan(basicCellNum);
			basicTable.addCell(cell);

			// 检查报告登记信息
			cell = new PdfPCell(new Phrase("2.登记信息", mintTitleFont));
			cell.setColspan(regCellNum);
			regTable.addCell(cell);
			cell = new PdfPCell(new Phrase(" ", mintTitleFont));
			cell.setColspan(regCellNum);
			regTable.addCell(cell);

			// 检查报告人行征信信息
			cell = new PdfPCell(new Phrase("3.人行征信信息", mintTitleFont));
			cell.setColspan(pbocCellNum);
			pbocTable.addCell(cell);
			cell = new PdfPCell(new Phrase(" ", mintTitleFont));
			cell.setColspan(pbocCellNum);
			pbocTable.addCell(cell);

			// 检查报告基本信息
			String basicCellTitile[] = { "检查任务编号", "检查名称", "客户编号", "客户名称", "证件类型", "证件号码", "授信总额(元)", "贷款总余额(元)", "其他不利因素", "情况说明及建议" };
			int basicColSpan[] = { 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 };
			// 表格内容设置
			ItextPdfUtil.setCellContent(basicTable, cellFont, tabFont, basicCellNum, basicCellTitile, basicColSpan, basicCont);

			// 检查报告登记信息
			String regCellTitile[] = { "客户经理号", "主管机构", "创建人", "创建时间" };
			int regColSpan[] = { 1, 1, 1, 1 };
			// 表格内容设置
			ItextPdfUtil.setCellContent(regTable, cellFont, tabFont, regCellNum, regCellTitile, regColSpan, regCont);

			// 预警信息
			cell = new PdfPCell(new Phrase("规则名称", cellFont));
			cell.setColspan(4);
			pbocTable.addCell(cell);
			cell = new PdfPCell(new Phrase("历史值", cellFont));
			cell.setColspan(1);
			pbocTable.addCell(cell);
			cell = new PdfPCell(new Phrase("当前值", cellFont));
			cell.setColspan(1);
			pbocTable.addCell(cell);

			int pbocColCellSpan[] = new int[pbocCellTitile.length];
			for (int i = 0; i < pbocCellTitile.length; i++) {
				pbocColCellSpan[i] = 4;
			}

			int pbocColSpan[] = new int[pbocCellTitile.length];
			for (int i = 0; i < pbocCellTitile.length; i++) {
				pbocColSpan[i] = 1;
			}
			// 表格内容设置
			ItextPdfUtil.setCellContent(pbocTable, tabFont, tabFont, pbocCellNum, pbocCellTitile, pbocColCellSpan, pbocColSpan, pbocOldCont,
					pbocNewCont);

			document.newPage();
			pdfWriter.setPageEmpty(false);
			Paragraph bgTitle = new Paragraph(title, titleFont);
			// 居中对齐
			bgTitle.setAlignment(1);
			document.add(bgTitle);
			document.add(basicTable);
			document.add(regTable);
			document.newPage();
			document.add(pbocTable);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 第五步，关闭Document
			if (document != null) {
				document.close();
			}
			// 把文件转为二进制字符串
			fileStrByte = fileToStrByte(filePath);
			// 删除文件
			pdfFile.delete();
		}
		return fileStrByte;
	}

	/**
	 *
	 * 1、把文件转为二进制字符串<br>
	 *
	 * @param filePath
	 * @param fileName
	 * @return
	 * @since 2019年2月1日 下午6:36:14
	 * @author:ludayong
	 */

	private static String fileToStrByte(String filePath) {
		File file = new File(filePath);
		String fileStr = null;
		byte[] fileBytes = null;
		try {
			fileBytes = FileUtil.toByteArray(file);
		} catch (IOException e) {
			e.printStackTrace();
			logger.error("文件转字节数组出现异常，异常信息" + e.getMessage());
		}
		fileStr = Base64.encodeBytes(fileBytes);
		return fileStr;
	}
}
